/*
 * Copyright 2024 Grabtaxi Holdings PTE LTD (GRAB)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.grab.grazel.extension

import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
import org.gradle.kotlin.dsl.property

/**
 * Additional experiments configuration
 */
data class ExperimentsExtension(private val objects: ObjectFactory) {

    /**
     * Limits the no of concurrent Gradle dependency resolution requests by establishing inter task dependencies
     * mirroring project dependency graph such that successors are always resolved first before predecessor
     * project is resolved. This is useful for large project with large dependency which can be memory intensive
     * to compute.
     *
     * Enabling this does not actually control the no of parallel requests, for that
     * please use `--max-workers` property from Gradle.
     */
    val limitDependencyResolutionParallelism: Property<Boolean> = objects
        .property<Boolean>()
        .convention(false)
}